<?php
/**
 * Контроллер
 * 
 * Общий класс контроллера
 * @author Anton Zavidov
 * @package myLiveShop
 */

/**
 * Базовый класс контроллера
 *
 */
abstract class Controller extends Base {
	/**
	 * Список моделей
	 *
	 * @var array;
	 */
	protected $models=array();
	/**
	 * Вью класс
	 *
	 * @var array;
	 */
	public $view;
	/**
	 * Имя контроллера
	 *
	 * @var string
	 */
	protected $name;
	/**
	 * Инстанс класа
	 *
	 * @var Controller
	 */
	protected static $instance;
	/**
	 * Констуктор
	 *
	 * @param string $className имя контроллера
	 */
	public function __construct($className=null){
		
		parent::__construct($className?$className:__CLASS__);
		$this->view = import('core.view.'.Vars::_(Router::VIEW_TYPE),true);
		self::$instance = $this;
	}
	/**
	 * Получение инстанса класса
	 *
	 * @return Controller
	 */
	public static function getInstance() {
		if (self::$instance === null)
		return self::$instance = new self();
		else
		return self::$instance;
	}
	/**
	 * Получаем модель контроллера
	 *
	 * @param string $name имя модели
	 * @return Model
	 */
	public function &model($name=false){
		$name=(is_string($name) && $name)?$name:$this->name;
		//если модели нет в списке добавляем её
		if(!isset($this->models[$name]))$this->models[$name]=null;
		//если модель не была загружена загружаем её
		if(!is_object($this->models[$name])){
			$this->models[$name]=import('model.'.$name,true);
			//если не удалось её загрузить
			if(!is_object($this->models[$name])){
				new CoreExeption('Не удалось загрузить модель'.$name.', в контролере '.$this->name,E_ERROR,__FILE__,__LINE__);
				return null;
			}
		}
		return $this->models[$name];
	}
	protected function build($view){
	    $this->view->show($this->name.'_'.$view);
	}
	protected function setShowPagination(){
		if(Vars::_(Router::VIEW_TYPE)!='json' || (Vars::_(Router::VIEW_TYPE)=='json' && Requestlocal::getString('pagination')))
		$this->view->set('pagination',$this->model()->pagination);
	}
	protected function setupPagination($page, &$settings){
		if((Vars::_(Router::VIEW_TYPE)!='json' || (Vars::_(Router::VIEW_TYPE)=='json' && Requestlocal::getString('pagination'))) && $page!==false){
			$settings['pagination']=array(
				'page'=>$page,
				'show'=>true
			);
		}
	}
}